iT邦幫忙

4

YOLO v7 實測

  • 分享至 

  • xImage
  •  

前言

YOLO v5 才release沒多久,沒想到 v6、v7 連續推出,有點應接不暇,在網路上找到兩個版本:

  1. 中研院王建堯博士:繼v4後,他又改良演算法,在2022年7月發表YOLO v7論文,並推出對應的程式碼
  2. JinTian:結合detectron v2,可輕易作出 Instance Segmentation。

筆者實際測試兩個專案,過程中有一些小小的心得,與大家分享。

實作

有關理論的探討,可參閱原論文最新的物件偵測王者 YOLOv7 介紹,本文只談實作,首先介紹如何利用現有模型進行偵測。

步驟如下:

  1. 下載程式:
git clone https://github.com/WongKinYiu/yolov7
  1. 下載權重檔至 yolov7 目錄,網址為 https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt

  2. 測試:打開終端機或cmd,輸入以下指令。

cd yolov7
python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg --view-img

執行結果會出現一秒後,自動關閉,可至 runs\detect\exp[N] 目錄找到輸出檔案。

  1. 同一支程式也可以偵測影片(test.mp4),使用GPU,影片播放會更順暢。
python detect.py --weights yolov7.pt --source ./test.mp4 --view-img

效果非常好。

自訂資料集

預設模型可偵測COCO資料集的80種類別,如果要偵測其他物件,必須自行訓練模型。筆者使用RoboFlow的海洋水生館資料集實測,內含7種動物。訓練過程發生記憶體不足的錯誤(筆者的顯卡記憶只有4GB),只好搬至Google Colab上訓練。

步驟如下:

  1. 下載程式。
# Download YOLOv7 repository and install requirements
!git clone https://github.com/WongKinYiu/yolov7
%cd yolov7
!pip install -r requirements.txt
  1. 將海洋水生館資料先上傳至Google Drive,再利用下列指令掛載至虛擬機。
from google.colab import drive
drive.mount('/content/drive')
  1. 解壓縮:筆者將Aquarium.zip儲存至目錄 0。
!unzip /content/drive/MyDrive/0/Aquarium.zip -d Aquarium
  1. 下載權重檔至 yolov7 目錄。
!gdown "https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt"
  1. 模型訓練:筆者在訓練時,有路徑上的錯誤,故在utils\datasets.py的671行前加 path = path.replace('\', '/')
!python train.py --batch 4 --cfg cfg/training/yolov7.yaml --img 768 1024 --epochs 55 --data ./Aquarium/data.yaml --weights '' --name yolov7 --hyp data/hyp.scratch.p5.yaml --device 0 

原本批量(batch)為64,在Colab還是爆掉,只好把它改小一點,缺點是訓練速度會變慢,RoboFlow建議訓練55執行週期,訓練總共耗時50分鐘。另外,海洋水生館資料集的圖檔寬高為768x1024,需在上述指令設定。

  1. 測試:模型訓練的權重檔會儲存在./runs/train/yolov7/weights/best.pt,注意,重新訓練會產生在不同目錄(yolov7[N]),訓練成功後可任意找一張圖測試。
!python detect.py --weights ./runs/train/yolov7/weights/best.pt --conf 0.3 --source ./Aquarium/valid/images/IMG_2342_jpeg_jpg.rf.f36e481b4e01c2e76e0b27e494682873.jpg

執行結果偵測到6隻企鵝,參數conf為置信度門檻值,可視情況調整。

  1. 顯示偵測結果,注意,每次偵測會產生在不同目錄exp[N]。
import glob
from IPython.display import Image, display

i = 0
limit = 10000 # max images to print
for imageName in glob.glob('/content/yolov7/runs/detect/exp/*.jpg'): #assuming JPG
    if i < limit:
      display(Image(filename=imageName))
      print("\n")
    i = i + 1

https://ithelp.ithome.com.tw/upload/images/20220823/20001976Fo95Vuqp5P.png

  1. 可下載權重檔,在本機測試。
files.download('./runs/train/yolov7/weights/best.pt')
  1. 本機測試。
python detect.py --weights best.pt --conf 0.3 --source ./Aquarium/valid/images/IMG_2342_jpeg_jpg.rf.f36e481b4e01c2e76e0b27e494682873.jpg

結論

筆者自網路抓取一些台北動物園的企鵝館圖片試試,效果並不理想,只好降低置信度門檻值,都產生誤認的情況,似乎沒有YOLO v4/v5 穩定,這次測試使用的資料集畫質不是很好,可能需要多作一些實驗,才能知分曉。另外,從 YOLO v5 起,演算法開發者均已改採PyTorch,並放棄使用Darknet架構了。

以下為工商廣告:)。
深度學習PyTorch入門到實戰應用影音課程:
https://ithelp.ithome.com.tw/upload/images/20230323/20001976OkmtrFnLWL.jpg

PyTorch:
開發者傳授 PyTorch 秘笈
https://ithelp.ithome.com.tw/upload/images/20220531/20001976MhL9K2rsgO.png

TensorFlow:
深度學習 -- 最佳入門邁向 AI 專題實戰
https://ithelp.ithome.com.tw/upload/images/20220531/20001976ZOxC7BHyN3.jpg


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
obarisk
iT邦研究生 1 級 ‧ 2022-08-25 23:02:55

有 jax 嗎

沒看到喔。

obarisk iT邦研究生 1 級 ‧ 2022-08-26 09:55:17 檢舉

Sad

0
s10955047
iT邦新手 5 級 ‧ 2022-10-01 16:12:06

我是透過Anaconda建置yolov7,並且使用與yolov4一樣的資料做訓練,且皆有使用GPU,數值上來看資料是有收斂,但拿圖片測試時卻很不準確,想請問有沒有可能建置yolov7時哪個部分沒有設置好會造成這樣的問題?
謝謝~

看更多先前的回應...收起先前的回應...

我也有類似的懷疑,不過實驗還不夠多,不敢斷言。應該與訓練參數無太大關係,除了 --conf 。

YOLOv7 Object Detection Paper Explanation and Inference 有針對 v4/5/7 及各種大小模型作比較,可參閱。

s10955047 iT邦新手 5 級 ‧ 2022-10-02 04:11:37 檢舉

謝謝您,我再研究您附的網址試試看~/images/emoticon/emoticon41.gif

s10955047 iT邦新手 5 級 ‧ 2022-10-14 14:42:30 檢舉

我後來有去詢問yolov7的專家,她告訴我可能是訓練資料缺少類似的物件
(ex:我檢測目標物為Lee_face,我需將多個其他人臉Lin's Haung's......也標註放入訓練資料中)模型才可以鑑別不同的人臉特徵

讚。

0
rtfgvb74125
iT邦新手 4 級 ‧ 2022-11-02 08:38:22

您好,我想知道yolov7的環境需求是什麼

看更多先前的回應...收起先前的回應...

只需 Anaconda(Python) + opencv-python + PyTorch。

pytorch的版本需求有關係嗎

感謝

我要留言

立即登入留言